예제 #1
0
파일: raw.cpp 프로젝트: as-capabl/megaflare
bool
check(misc::runner const & i_runner, host::generic_program i_program)
{
    chrono::steady_clock::time_point tp = chrono::steady_clock::now();


    host::buffer<pfm::int_> bufWrite(i_runner.m_context, item_count);
    typedef host::buffer<pfm::int_>::const_iterator iterator;


    i_runner.m_queue(
        run_kernel(i_program,
                   fill_index(bufWrite),
                   item_count));
    i_runner.m_queue(
        run_kernel(i_program,
                   twice(bufWrite),
                   item_count));


    auto future =
        i_runner.m_queue(
            bufWrite.with_range(
    [](iterator i_begin, iterator i_end) {
        return std::accumulate(i_begin, i_end, 0);
    }));
    std::future_status result = future.wait_until(tp + chrono::seconds(5));
    assert(result == std::future_status::ready);
    assert(future.get() == arith(2, item_count));

    return true;
}
예제 #2
0
void stress(misc::runner const & i_runner,
            host::program<decltype(prog)> i_program)
{
    host::context const& context = i_runner.m_context;
    host::queue & queue = i_runner.m_queue;

    host::buffer<pfm::int_> bufWrite(context, item_count);
    host::buffer<pfm::int_> bufDiff(context, item_count);
    queue(host::run_kernel(i_program, fill_index(bufWrite), item_count));
    queue(host::run_kernel(i_program, fill_index(bufDiff), item_count));

    for (int i = 0; i < 100; ++i) {
        std::thread th(
        [&] () {
            queue(host::run_kernel(i_program, add(bufWrite, bufDiff), item_count));
            queue(host::run_kernel(i_program, subtract(bufWrite, bufDiff), item_count));
        }
        );
        th.detach();
    }

    typedef decltype(bufWrite)::iterator iterator;
    for (int i = 0; i < 20; ++i) {
        auto future2 =
            queue(bufWrite.with_range(
        [](iterator i_begin, iterator i_end) {
            return std::accumulate(i_begin, i_end, 0);
        }));
        cl_int retval = future2.get();
        //std::cout << retval << std::endl;
        assert( retval %  (item_count * (item_count - 1) / 2) == 0);
    }
}
예제 #3
0
파일: ex43.c 프로젝트: wei-wang-523/cascade
int main(int argc, char *argv[]) {
	const int numWrites = 4, numReads = 10, numBufs = 3, maxN = 20;
	int i,j;
	data_t datum;
	bool_t shouldReset;
	bool_t datumOut;
	
	buf_t **bufs = (buf_t **)malloc(numBufs * sizeof(buf_t *));
	for (i=0; i<numBufs; i++)
		bufs[i] = bufAlloc(maxN);
	
	for (i=0; i<numWrites; i++) {
		for (j=0; j<numBufs; j++)
			bufWrite(bufs[j], randomIdx(bufs[j]), (data_t)__VERIFIER_nondet_int());
		
	}
	
	for (i=0; i<numReads; i++) {
		for (j=0; j<numBufs; j++) {
			datum = (data_t) __VERIFIER_nondet_int();
			shouldReset = __VERIFIER_nondet_int();
			datumOut = (data_t)0;
			if (shouldReset)
				bufReset(bufs[j], datum);
			else
				datumOut = bufRead(bufs[j], randomIdx(bufs[j]));
			
			
		}
	}
	return 1;
}
예제 #4
0
bool
check(misc::runner const & i_runner, host::generic_program i_program)
{
    chrono::steady_clock::time_point tp = chrono::steady_clock::now();  

    host::buffer<pfm::int_> bufWrite(i_runner.m_context, item_count);
    typedef host::buffer<pfm::int_>::const_iterator iterator;

    // kernel内で使用できる事の確認
    i_runner.m_queue(
        run_kernel(
            i_program, 
            fill_index(bufWrite), 
            item_count));


    auto future = 
        i_runner.m_queue(
            bufWrite.with_range(
                [](iterator i_begin, iterator i_end){
                    return std::accumulate(i_begin, i_end, 0);
                }));
    std::future_status result = 
        future.wait_until(tp + chrono::seconds(5));

    assert(result == std::future_status::ready);
    assert(future.get() == arith(2, item_count));

    // ホストから呼べない事の確認
    try {
        int const a = 1; //gcc-4.7.2 twice(1)と書くと内部エラー
        i_runner.m_queue(
            host::run_kernel(
                i_program,
                twice(a),
                1)
        );
        assert(false); 
    }
    catch (cl::Error err) {
        assert(err.err() == CL_INVALID_KERNEL_NAME);
    }

    return true;
}
예제 #5
0
파일: tunnel.c 프로젝트: CeKMTL/polipo
static void
tunnelDispatch(TunnelPtr tunnel)
{
    if(circularBufferEmpty(&tunnel->buf1)) {
        if(tunnel->buf1.buf && 
           !(tunnel->flags & (TUNNEL_READER1 | TUNNEL_WRITER2))) {
            dispose_chunk(tunnel->buf1.buf);
            tunnel->buf1.buf = NULL;
            tunnel->buf1.head = tunnel->buf1.tail = 0;
        }
    }

    if(circularBufferEmpty(&tunnel->buf2)) {
        if(tunnel->buf2.buf &&
           !(tunnel->flags & (TUNNEL_READER2 | TUNNEL_WRITER1))) {
            dispose_chunk(tunnel->buf2.buf);
            tunnel->buf2.buf = NULL;
            tunnel->buf2.head = tunnel->buf2.tail = 0;
        }
    }

    if(tunnel->fd1 >= 0) {
        if(!(tunnel->flags & (TUNNEL_READER1 | TUNNEL_EOF1)) && 
           !circularBufferFull(&tunnel->buf1)) {
            tunnel->flags |= TUNNEL_READER1;
            bufRead(tunnel->fd1, &tunnel->buf1, tunnelRead1Handler, tunnel);
        }
        if(!(tunnel->flags & (TUNNEL_WRITER1 | TUNNEL_EPIPE1)) &&
           !circularBufferEmpty(&tunnel->buf2)) {
            tunnel->flags |= TUNNEL_WRITER1;
            /* There's no IO_NOTNOW in bufWrite, so it might close the
               file descriptor straight away.  Wait until we're
               rescheduled. */
            bufWrite(tunnel->fd1, &tunnel->buf2, tunnelWrite1Handler, tunnel);
            return;
        }
        if(tunnel->fd2 < 0 || (tunnel->flags & TUNNEL_EOF2)) {
            if(!(tunnel->flags & TUNNEL_EPIPE1))
                shutdown(tunnel->fd1, 1);
            tunnel->flags |= TUNNEL_EPIPE1;
        } else if(tunnel->fd1 < 0 || (tunnel->flags & TUNNEL_EPIPE2)) {
            if(!(tunnel->flags & TUNNEL_EOF1))
                shutdown(tunnel->fd1, 0);
            tunnel->flags |= TUNNEL_EOF1;
        }
        if((tunnel->flags & TUNNEL_EOF1) && (tunnel->flags & TUNNEL_EPIPE1)) {
            if(!(tunnel->flags & (TUNNEL_READER1 | TUNNEL_WRITER1))) {
                CLOSE(tunnel->fd1);
                tunnel->fd1 = -1;
            }
        }
    }

    if(tunnel->fd2 >= 0) {
        if(!(tunnel->flags & (TUNNEL_READER2 | TUNNEL_EOF2)) && 
           !circularBufferFull(&tunnel->buf2)) {
            tunnel->flags |= TUNNEL_READER2;
            bufRead(tunnel->fd2, &tunnel->buf2, tunnelRead2Handler, tunnel);
        }
        if(!(tunnel->flags & (TUNNEL_WRITER2 | TUNNEL_EPIPE2)) &&
           !circularBufferEmpty(&tunnel->buf1)) {
            tunnel->flags |= TUNNEL_WRITER2;
            bufWrite(tunnel->fd2, &tunnel->buf1, tunnelWrite2Handler, tunnel);
            return;
        }
        if(tunnel->fd1 < 0 || (tunnel->flags & TUNNEL_EOF1)) {
            if(!(tunnel->flags & TUNNEL_EPIPE2))
                shutdown(tunnel->fd2, 1);
            tunnel->flags |= TUNNEL_EPIPE2;
        } else if(tunnel->fd1 < 0 || (tunnel->flags & TUNNEL_EPIPE1)) {
            if(!(tunnel->flags & TUNNEL_EOF2))
                shutdown(tunnel->fd2, 0);
            tunnel->flags |= TUNNEL_EOF2;
        }
        if((tunnel->flags & TUNNEL_EOF2) && (tunnel->flags & TUNNEL_EPIPE2)) {
            if(!(tunnel->flags & (TUNNEL_READER2 | TUNNEL_WRITER2))) {
                CLOSE(tunnel->fd2);
                tunnel->fd2 = -1;
            }
        }
    }

    if(tunnel->fd1 < 0 && tunnel->fd2 < 0)
        destroyTunnel(tunnel);
    else
        assert(tunnel->flags & (TUNNEL_READER1 | TUNNEL_WRITER1 |
                                TUNNEL_READER2 | TUNNEL_WRITER2));
}
예제 #6
0
int map_image_header(char *buf, Image_subheader *header) {
  int i = 0;
  bufWrite_s(header->data_type, buf, &i);
  bufWrite_s(header->num_dimensions, buf, &i);
  bufWrite_s(header->x_dimension, buf, &i);
  bufWrite_s(header->y_dimension, buf, &i);
  bufWrite_s(header->z_dimension, buf, &i);
  bufWrite_f(header->z_offset, buf, &i);
  bufWrite_f(header->x_offset, buf, &i);
  bufWrite_f(header->y_offset, buf, &i);
  bufWrite_f(header->recon_zoom, buf, &i);
  bufWrite_f(header->scale_factor, buf, &i);
  bufWrite_s(header->image_min, buf, &i);
  bufWrite_s(header->image_max, buf, &i);
  bufWrite_f(header->x_pixel_size, buf, &i);
  bufWrite_f(header->y_pixel_size, buf, &i);
  bufWrite_f(header->z_pixel_size, buf, &i);
  bufWrite_u(header->frame_duration, buf, &i);
  bufWrite_u(header->frame_start_time, buf, &i);
  bufWrite_s(header->filter_code, buf, &i);
  bufWrite_f(header->x_resolution, buf, &i);
  bufWrite_f(header->y_resolution, buf, &i);
  bufWrite_f(header->z_resolution, buf, &i);
  bufWrite_f(header->num_r_elements, buf, &i);
  bufWrite_f(header->num_angles, buf, &i);
  bufWrite_f(header->z_rotation_angle, buf, &i);
  bufWrite_f(header->decay_corr_fctr, buf, &i);
  bufWrite_i(header->processing_code, buf, &i);
  bufWrite_u(header->gate_duration, buf, &i);
  bufWrite_i(header->r_wave_offset, buf, &i);
  bufWrite_i(header->num_accepted_beats, buf, &i);
  bufWrite_f(header->filter_cutoff_frequency, buf, &i);
  bufWrite_f(header->filter_resolution, buf, &i);
  bufWrite_f(header->filter_ramp_slope, buf, &i);
  bufWrite_s(header->filter_order, buf, &i);
  bufWrite_f(header->filter_scatter_fraction, buf, &i);
  bufWrite_f(header->filter_scatter_slope, buf, &i);
  bufWrite(header->annotation, buf, &i, 40);
  bufWrite_f(header->mt_1_1, buf, &i);
  bufWrite_f(header->mt_1_2, buf, &i);
  bufWrite_f(header->mt_1_3, buf, &i);
  bufWrite_f(header->mt_2_1, buf, &i);
  bufWrite_f(header->mt_2_2, buf, &i);
  bufWrite_f(header->mt_2_3, buf, &i);
  bufWrite_f(header->mt_3_1, buf, &i);
  bufWrite_f(header->mt_3_2, buf, &i);
  bufWrite_f(header->mt_3_3, buf, &i);
  bufWrite_f(header->rfilter_cutoff, buf, &i);
  bufWrite_f(header->rfilter_resolution, buf, &i);
  bufWrite_s(header->rfilter_code, buf, &i);
  bufWrite_s(header->rfilter_order, buf, &i);
  bufWrite_f(header->zfilter_cutoff, buf, &i);
  bufWrite_f(header->zfilter_resolution, buf, &i);
  bufWrite_s(header->zfilter_code, buf, &i);
  bufWrite_s(header->zfilter_order, buf, &i);
  bufWrite_f(header->mt_1_4, buf, &i);
  bufWrite_f(header->mt_2_4, buf, &i);
  bufWrite_f(header->mt_3_4, buf, &i);
  bufWrite_s(header->scatter_type, buf, &i);
  bufWrite_s(header->recon_type, buf, &i);
  bufWrite_s(header->recon_views, buf, &i);
  return 1;
}
예제 #7
0
int map_main_header(char *bufr,Main_header *header) {

  int i = 0, j = 0;
  char mn[20];
  /* set magic number */
  sprintf(mn,"%s%d%s", magicNumber,header->sw_version,
	  dstypecode[header->file_type]);
  bufWrite(mn, bufr, &i, 14);
  
  /* copy buffer into struct */
  bufWrite(header->original_file_name, bufr, &i, NameLen);
  bufWrite_s(header->sw_version, bufr, &i);
  bufWrite_s(header->system_type, bufr, &i);
  bufWrite_s(header->file_type, bufr, &i);
  bufWrite(header->serial_number, bufr, &i, 10);
  bufWrite_u(header->scan_start_time, bufr, &i);
  bufWrite(header->isotope_code, bufr, &i, 8);
  bufWrite_f(header->isotope_halflife, bufr, &i);
  bufWrite(header->radiopharmaceutical, bufr, &i, NameLen);
  bufWrite_f(header->gantry_tilt, bufr, &i);
  bufWrite_f(header->gantry_rotation, bufr, &i);
  bufWrite_f(header->bed_elevation, bufr, &i);
  bufWrite_f(header->intrinsic_tilt, bufr, &i);
  bufWrite_s(header->wobble_speed, bufr, &i);
  bufWrite_s(header->transm_source_type, bufr, &i);
  bufWrite_f(header->distance_scanned, bufr, &i);
  bufWrite_f(header->transaxial_fov, bufr, &i);
  bufWrite_s(header->angular_compression, bufr, &i);
  bufWrite_s(header->coin_samp_mode, bufr, &i);
  bufWrite_s(header->axial_samp_mode, bufr, &i);
  bufWrite_f(header->calibration_factor, bufr, &i);
  bufWrite_s(header->calibration_units, bufr, &i);
  bufWrite_s(header->calibration_units_label, bufr, &i);
  bufWrite_s(header->compression_code, bufr, &i);
  bufWrite(header->study_name, bufr, &i, 12);
  bufWrite(header->patient_id, bufr, &i, IDLen);
  bufWrite(header->patient_name, bufr, &i, NameLen);
  bufWrite(header->patient_sex, bufr, &i, 1);
  bufWrite(header->patient_dexterity, bufr, &i, 1);
  bufWrite_f(header->patient_age, bufr, &i);
  bufWrite_f(header->patient_height, bufr, &i);
  bufWrite_f(header->patient_weight, bufr, &i);
  bufWrite_i(header->patient_birth_date, bufr, &i);
  bufWrite(header->physician_name, bufr, &i, NameLen);
  bufWrite(header->operator_name, bufr, &i, NameLen);
  bufWrite(header->study_description, bufr, &i, NameLen);
  bufWrite_s(header->acquisition_type, bufr, &i);
  bufWrite_s(header->patient_orientation, bufr, &i);
  bufWrite(header->facility_name, bufr, &i, 20);
  bufWrite_s(header->num_planes, bufr, &i);
  bufWrite_s(header->num_frames, bufr, &i);
  bufWrite_s(header->num_gates, bufr, &i);
  bufWrite_s(header->num_bed_pos, bufr, &i);
  bufWrite_f(header->init_bed_position, bufr, &i);
  for(j = 0; j < 15; j++)
  	bufWrite_f(header->bed_offset[j], bufr, &i);
  bufWrite_f(header->plane_separation, bufr, &i);
  bufWrite_s(header->lwr_sctr_thres, bufr, &i);
  bufWrite_s(header->lwr_true_thres, bufr, &i);
  bufWrite_s(header->upr_true_thres, bufr, &i);
  bufWrite(header->user_process_code, bufr, &i, 10);
  bufWrite_s(header->acquisition_mode, bufr, &i);
  bufWrite_f(header->bin_size, bufr, &i);
  bufWrite_f(header->branching_fraction, bufr, &i);
  bufWrite_u(header->dose_start_time, bufr, &i);
  bufWrite_f(header->dosage, bufr, &i);
  bufWrite_f(header->well_counter_factor, bufr, &i);
  bufWrite(header->data_units, bufr, &i, 32);
  bufWrite_s(header->septa_state, bufr, &i);
  return 1;
}