예제 #1
0
// This returns #t if successful, or a number (the correct length) if there was a mismatched length.
ptr s_fftw_execute (ptr vec, uptr plan) {
  int i;
  int len = Svector_length(vec);
  int N = len / 2;  
  clock_t start, end;
  plan_t* p = (plan_t*) plan;

  /*printf("Executing!! len %i  incoming len %i\n", p->vec_len, Svector_length(vec));
  for (i=0; i<10; i++)
    printf("  Got element %i %lf\n", i, ((double*)p->vec)[i]);
  printf("  Got element %i %lf\n", 262000, ((double*)p->vec)[262000]);
  printf("  Got element %i %lf\n", 524000, ((double*)p->vec)[524000]);*/

  // TODO: CHECK THAT LENGTH IS RIGHT!
  if (N != p->vec_len) {
    printf("Mismatched lengths! %i %i\n", N, p->vec_len);
    return(Sfixnum((uptr)p->vec_len));
  }

  //printf("Measuring... ");  fflush( 0 );
  //start = clock();
  //end = clock();
  //printf("Done. (time used %i)\n", end - start);  fflush( 0 );

  //printf("Filling... \n");  fflush( 0 );
  for(i=0; i<len; i+=2) {
    /*printf("Loading: real %lf, imag %lf\n",
	   Sflonum_value(Svector_ref(vec, i)),
	   Sflonum_value(Svector_ref(vec, i+1)));*/
    ((double*)p->vec)[i]   = Sflonum_value(Svector_ref(vec, i));
    ((double*)p->vec)[i+1] = Sflonum_value(Svector_ref(vec, i+1));
  }
  //printf("Done\n");
 
  //printf("Executing... ");  fflush( 0 );
  //start = clock();
  fftw_execute(p->plan); 
  //end = clock();
  //printf("Done. (time used %i)\n", end - start);  fflush( 0 );
  //printf("Clocks per sec... %i\n", CLOCKS_PER_SEC);
  
  // Fill the output back into the vector:
  for(i=0; i<len; i++) {
    //printf("Unloading: %lf\n", ((double*)out)[i]);
    Svector_set(vec, i, Sflonum(((double*)p->vec)[i]));
  }
}
예제 #2
0
파일: boot.c 프로젝트: LeifAndersen/racket
void racket_boot(int argc, char **argv, char *exec_file, char *run_file,
		 char *boot_exe, long segment_offset,
                 char *coldir, char *configdir, /* wchar_t * */void *dlldir,
                 int pos1, int pos2, int pos3,
                 int cs_compiled_subdir, int is_gui,
		 int wm_is_gracket_or_x11_arg_count,
                 char *gracket_guid_or_x11_args,
		 void *dll_open, void *dll_find_object)
/* exe argument already stripped from argv */
{
#if !defined(RACKET_USE_FRAMEWORK) || !defined(RACKET_AS_BOOT)
  int fd;
#endif
#ifdef RACKET_USE_FRAMEWORK
  const char *fw_path;
#endif

#ifdef WIN32
  if (dlldir)
    rktio_set_dll_path((wchar_t *)dlldir);
  if (dll_open)
    rktio_set_dll_procs(dll_open, dll_find_object);
#endif

  Sscheme_init(NULL);

#ifdef RACKET_USE_FRAMEWORK
  fw_path = get_framework_path();
  Sregister_boot_file(path_append(fw_path, "petite.boot"));
  Sregister_boot_file(path_append(fw_path, "scheme.boot"));
# ifdef RACKET_AS_BOOT
  Sregister_boot_file(path_append(fw_path, "racket.boot"));
# endif
#else
  fd = open(boot_exe, O_RDONLY | BOOT_O_BINARY);

  {
    int fd1, fd2;

    fd1 = dup(fd);
    lseek(fd1, pos1, SEEK_SET);    
    Sregister_boot_file_fd("petite", fd1);
    
    fd2 = open(boot_exe, O_RDONLY | BOOT_O_BINARY);
    lseek(fd2, pos2, SEEK_SET);
    Sregister_boot_file_fd("scheme", fd2);

# ifdef RACKET_AS_BOOT
    fd = open(boot_exe, O_RDONLY | BOOT_O_BINARY);
    lseek(fd, pos3, SEEK_SET);
    Sregister_boot_file_fd("racket", fd);
# endif
  }
#endif

  Sbuild_heap(NULL, init_foreign);
  
  {
    ptr l = Snil;
    int i;
    char segment_offset_s[32], wm_is_gracket_s[32];

    for (i = argc; i--; ) {
      l = Scons(Sbytevector(argv[i]), l);
    }
    l = Scons(Sbytevector(gracket_guid_or_x11_args), l);
    sprintf(wm_is_gracket_s, "%d", wm_is_gracket_or_x11_arg_count);
    l = Scons(Sbytevector(wm_is_gracket_s), l);
    l = Scons(Sbytevector(is_gui ? "true" : "false"), l);
    l = Scons(Sbytevector(cs_compiled_subdir ? "true" : "false"), l);
    sprintf(segment_offset_s, "%ld", segment_offset);
    l = Scons(Sbytevector(segment_offset_s), l);
    l = Scons(Sbytevector(configdir), l);
    l = Scons(parse_coldirs(coldir), l);
    l = Scons(Sbytevector(run_file), l);
    l = Scons(Sbytevector(exec_file), l);

#ifdef RACKET_AS_BOOT
    {
      ptr c, start, apply;
      c = Stop_level_value(Sstring_to_symbol("scheme-start"));
      start = Scall0(c);
      apply = Stop_level_value(Sstring_to_symbol("apply"));
      Scall2(apply, start, l);
    }
#else
    Sset_top_level_value(Sstring_to_symbol("bytes-command-line-arguments"), l);
#endif
  }

#ifndef RACKET_AS_BOOT
# ifdef RACKET_USE_FRAMEWORK
  fd = open(path_append(fw_path, "racket.so"), O_RDONLY);
  pos3 = 0;
# endif
  
  {
    ptr c, p;

    if (pos3) lseek(fd, pos3, SEEK_SET);
    c = Stop_level_value(Sstring_to_symbol("open-fd-input-port"));
    p = Scall1(c, Sfixnum(fd));
    Slock_object(p);
    c = Stop_level_value(Sstring_to_symbol("port-file-compressed!"));
    Scall1(c, p);
    Sunlock_object(p);
    c = Stop_level_value(Sstring_to_symbol("load-compiled-from-port"));
    Scall1(c, p);
  }
#endif
}