OpenCLProgram* OpenCLContext::loadProgramFromStrings(std::vector<std::string> file_strs) {

    const char * str_ptr[file_strs.size()];
    size_t size_ptr[file_strs.size()];
    for (int i = 0; i < file_strs.size(); i++) {
        str_ptr[i] = file_strs[i].c_str();
        size_ptr[i] = file_strs[i].size();
    }

    cl_int error;
    cl_program program = clCreateProgramWithSource (context, file_strs.size(), str_ptr, size_ptr, &error);
    check_error(error);

    // build for all devices, I can implement different devices later;
    error = clBuildProgram(program, 0, NULL, "", NULL, NULL);
    if (error) {
        print_err_msg(error);
        // uses first device for error messages
        size_t length;
        check_error(clGetProgramBuildInfo(program, devices[0]->getDeviceId(), CL_PROGRAM_BUILD_LOG, 0, NULL, &length));
        char buffer[length+1];
        check_error(clGetProgramBuildInfo(program, devices[0]->getDeviceId(), CL_PROGRAM_BUILD_LOG, length, buffer, &length));
        std::cout<<"--- Build log ---"<<std::endl<<buffer<<std::endl<<"---  End log  ---"<<std::endl;
        assert(!error);
    }

    OpenCLProgram* ret = new OpenCLProgram(program, this);
    programs.push_back(ret);
    return ret;
}
Exemple #2
0
void print_err_msg(ErrorMsg *err, ErrColor color) {
    if (color == ErrColorOn || (color == ErrColorAuto && os_stderr_tty())) {
        fprintf(stderr, WHITE "%s:%d:%d: " RED "error:" WHITE " %s" RESET "\n",
                buf_ptr(err->path),
                err->line_start + 1, err->column_start + 1,
                buf_ptr(err->msg));

        fprintf(stderr, "%s\n", buf_ptr(&err->line_buf));
        for (int i = 0; i < err->column_start; i += 1) {
            fprintf(stderr, " ");
        }
        fprintf(stderr, GREEN "^" RESET "\n");

    } else {
        fprintf(stderr, "%s:%d:%d: error: %s\n",
                buf_ptr(err->path),
                err->line_start + 1, err->column_start + 1,
                buf_ptr(err->msg));
    }

    for (int i = 0; i < err->notes.length; i += 1) {
        ErrorMsg *note = err->notes.at(i);
        print_err_msg(note, color);
    }
}
Exemple #3
0
rt_private int run_idr_read (IDR *bu)
{
	RT_GET_CONTEXT
	register char * ptr = bu->i_buf;
	int32 read_size;
	long amount_left;
	register int part_read;
	register int total_read = 0;

	if ((char_read_func ((char *)(&read_size), sizeof (int32))) < sizeof (int32))
		eise_io("Independent retrieve: unable to read buffer size.");

	read_size = ntohl (read_size);
#ifdef DEBUG
	if (read_size > idrs_size (bu))
		print_err_msg(stderr, "Too large %d info for %d buffer\n", read_size, idrs_size (bu));
#endif

	amount_left = read_size;
	while (total_read < read_size) {
		if ((part_read = char_read_func (ptr, amount_left)) <= 0) {
				/* If we read 0 bytes, it means that we reached the end of file,
				 * so we are missing something, instead of going further we stop */
			eio();
		}
		total_read += part_read;
		ptr += part_read;
		amount_left -= part_read;
		}
	return total_read;
}
Exemple #4
0
rt_private Signal_t emergency(int sig)
{
	/* A signal has been trapped while we were failing peacefully. The memory
	 * must really be in a desastrous state, so print out a give-up message
	 * and exit.
	 * The code is protected in case `emergency' is triggered while calling `print_err_msg'
	 * which was happening in eweasel test#vsrp208 because we got a SIGPIPE when outputs
	 * of `ec' are redirected and closed while the compiler is not yet done.
	 */
		
	if (!emergency_call_success) {
		emergency_call_success = 1;
		print_err_msg(stderr, "\n\n%s: PANIC: caught signal #%d (%s) -- Giving up...\n",
			egc_system_name, sig, signame(sig));
	}

	exit(2);							/* Really abnormal termination */

	/* NOTREACHED */
}
Exemple #5
0
rt_private void run_idr_write (IDR *bu)
{
	RT_GET_CONTEXT
	register char * ptr = idrs_buf (bu);
	int32 host_send, send_size = (int32) (bu->i_ptr - ptr);
	register int number_writen;

#ifdef DEBUG
	if (send_size == 0)
		print_err_msg(stderr, "send size equal zero");
#endif

	host_send = htonl (send_size - sizeof(int32));
	memcpy (ptr, &host_send, sizeof(int32));

	while (send_size > 0) {
		if ((number_writen = char_write_func (ptr, (int) send_size)) <= 0)
			eio();
		send_size -= number_writen;
		ptr += number_writen;
		}
}