Где заголовочные файлы OpenGL расположены на MacOSX?

В/usr/include,

Я пытался держать для глоссария GL и OpenGL.. .but не может найти его.

Где эти заголовочные файлы расположены?

26
задан anon 4 February 2010 в 03:56
поделиться

2 ответа

Я не думаю, что это ужасная идея.

Рассмотрим сценарий подключения/месяц.

Учитывая, что длина записи составляет ~ 40 (это щедро) символов, и вы получаете ~ 8200 записей в месяц, окончательный размер документа будет составлять ~ 350K в конце месяца.

Это означает, что, идя полным ходом, вы будете читать и писать 2000 350K документов каждые 5 минут.

Количество операций ввода-вывода составляет менее 6 МБ/с с учетом операций чтения и записи, усредненных для 5-миллиметрового интервала времени. Это хорошо внутри даже низшего уровня оборудования сегодня.

Однако существует и другая проблема. Когда вы храните этот документ, диван будет оценивать его содержимое для построения своего представления, поэтому диван будет анализировать 350K документы. Я боюсь, что (наконец-то проверка, но это было некоторое время) я не верю, что диван хорошо масштабируется между ядрами CPU, так что это может легко закрепить одно ядро CPU, которое диван будет использовать. Я хотел бы надеяться, что диван умеет читать, анализировать и обрабатывать 2 МБ/с, но я откровенно не знаю. При всех преимуществах эрланг - не лучшая задница на прямом компьютерном языке.

Последняя проблема заключается в том, чтобы не отставать от базы данных. Это будет писать 700 МБ каждые 5 минут в конце месяца. С архитектурой Couchs (только добавление) вы будете записывать 700MB данных каждые 5 минут, что 8.1GB в час, а 201GB через 24 часа.

После сжатия БД он разрушается до 700MB (в течение одного месяца), но во время этого процесса этот файл становится большим и довольно быстро.

На стороне извлечения эти большие документы меня не пугают. Загружая 350K JSON документ, да это большое, но дело не в этом большой, не на современных аппаратных средствах. На досках объявлений есть аватары побольше. Итак, все, что вы хотите сделать в отношении активности соединения в течение месяца, будет довольно быстро, я думаю. Между соединениями, очевидно, чем больше вы захватите, тем дороже он будет получать (700MB для всех 2000 соединений). 700MB - это реальное число, которое оказывает реальное влияние. Кроме того, ваш процесс должен быть агрессивным в выбросе данных, которые вам не интересны, чтобы он мог выбросить бафф (если только вы не хотите загрузить 700MB кучу в процессе отчета).

Учитывая эти цифры, Connection/Day может быть лучшей ставкой, так как вы можете контролировать гранулярность немного лучше. Тем не менее, честно говоря, я бы пошел на грубейший документ вы можете, потому что я думаю, что это дает вам наилучшую ценность из базы данных, только потому, что сегодня все головки ищет и ротации тарелки являются то, что убивают много производительности ввода-вывода, много дисковых потоков данных очень хорошо. Более крупные документы (предполагая хорошо расположенные данные, поскольку диван постоянно уплотняется, это не должно быть проблемой) перетекают больше, чем ищут. Поиск в памяти «свободен» по сравнению с диском.

Во что бы то ни стало проведите собственные тесты на нашем оборудовании, но отнесите все эти соображения к сердцу.

ИЗМЕНИТЬ:

После дополнительных экспериментов...

Пара интересных наблюдений.

Во время импорта больших документов ЦП одинаково важен для скорости ввода-вывода.Это происходит из-за количества кроссинга и ЦП, потребляемых при преобразовании JSON во внутреннюю модель для использования представлениями. Используя большие (350 000) документы, мои ЦП были в значительной степени исчерпаны (350%). Напротив, с меньшими документами, они гудели на 200%, хотя, в целом, это была одна и та же информация, просто портированная по-другому.

Для ввода-вывода, во время 350K документов, я строил 11MB/sec, но с меньшими документами он был только 8MB/sec.

Сжатие оказалось почти связанным с вводом-выводом. Мне трудно получить хорошие цифры по своему потенциалу ввода-вывода. Копия кэшированного файла толкает 40 + МБ/с. Уплотнение выполнялось примерно в 8MB/sec. Но это согласуется с сырой нагрузкой (предполагая, что диван перемещает сообщение по сообщению). Процессор ниже, так как он выполняет меньше обработки (он не интерпретирует полезные нагрузки JSON или перестраивает представления), а также один процессор, выполняющий эту работу.

Наконец, для чтения я попытался выгрузить всю базу данных. Для этого был привязан один процессор, и мой ввод-вывод был довольно низким. Я сделал этот пункт, чтобы убедиться, что файл CouchDB не был на самом деле кэширован, моя машина имеет много памяти, так что много вещей кэшируется. Необработанный дамп через _all_docs составлял всего около 1 МБ/с. Это почти все поиск и ротация задержки, чем что-либо еще. Когда я делал это с большими документами, ввод-вывод достигал 3 МБ/с, что просто показывает влияние потоковой передачи, о котором я говорил, как о преимуществе для больших документов.

И следует отметить, что на веб-сайте Couch существуют методы улучшения производительности, которых я не следовал. Примечательно, что я использовал случайные удостоверения. Наконец, это было сделано не как показатель производительности диван, а как место, где нагрузка, по-видимому, заканчивается. Большие и небольшие различия в документах, которые я думал, были интересными.

Наконец, максимальная производительность не так важна, как достаточно высокая производительность для приложений с аппаратным обеспечением. Как вы уже упомянули, вы делаете свое собственное тестирование, и это все, что действительно важно.

-121--1918114-

Можно определить собственный тип переменной с помощью кода, например:

Public T_Person as Type
    name as string
    dateOfBirth as date
    ....
    email() as string (*)
    ....
End type

Затем можно объявить тип T_person в коде с помощью:

Dim currentPerson as T_Person

currentPerson.name = myName
currentPerson.dateOfBirth = myDate
currentPerson.email(1) = myFirstEmail
....

(*) Я не помню сведения для объявления массивов в таких обстоятельствах. При определении переменной может потребоваться определить длину массива. Пожалуйста, проверьте справку.

Того же результата можно достичь, объявив модуль класса с именем, например, «Person». В этом модуле класса вы сможете не только следить за свойствами объекта (такими как имя, dateOfBirth и т.д.), но и за событиями объекта (инициализация и удаление). Вы также сможете создавать методы для этого объекта. Код будет выглядеть следующим образом:

Dim myPerson as Person

set myPerson = New Person

myPerson.name = myName
myPerson.dateOfBirth = myDate

if myPerson.age > 18 then  (*)
    'the guy is an adult'
    myPerson.createAccount
Else
    'the guy is not ...'
Endif

(*) Здесь возраст является вычисляемым свойством объекта, доступным, если значение dateOfBirth не равно null. Используйте Google «модуль класса VBA», чтобы найти различные примеры реализации модуля класса в VBA.

Теперь, если вы хотите управлять коллекцией подобных «объектов» (здесь, Лица),необходимо создать модуль класса для коллекции объектов (например, модуль класса «Лица») и использовать объект «Коллекция», доступный в VBA. Затем вы закончите с 2 различными модулями класса: Person (будет содержать сведения о каждом человеке) и Persons (будет содержать коллекцию Persons). Затем вы сможете получить код, такой как

Public myPersons as Persons    'at the app level, 1 main collection'

myPersons.add ....              'adding a new person to your collection'

myPersons.count ...             'counting number of persons in myPersons'

Пожалуйста, погуглите на «объекте коллекции VBA» для примеров по управлению коллекциями в VBA. Проверьте мое предложение кода, так как это было написано на лету, и без файла справки VBA.

Решение «Class» явно более мощное, но более сложное, чем «Type». Иди, если тебе нужно. Это определенно стоит боли!

PS: Я не очень доволен своими именами здесь, так как это может привести к очень запутанному коду при работе с коллекцией myPersons и экземпляром myPerson объекта o Person. Я бы посоветовал вам найти более очевидный, например, «PersonCollection» и «Person» или даже «Individual»

-121--3879687-

Они расположены по адресу/System/Library/Framework/OpenGL.framework/Headers. Чтобы включить их, просто используйте:

   #include <OpenGL/gl.h>
   #include <OpenGL/glu.h>
   #include <OpenGL/glext.h>
   #include <GLUT/glut.h>

и т.д. Убедитесь в наличии связи с соответствующими рамками, например,

cc <your_file.c> -framework GLUT -framework OpenGL 

для OpenGL и GLUT

29
ответ дан 28 November 2019 в 07:02
поделиться

Мы делаем что-то подобное, чтобы запустить то, что на самом деле интеграция (регрессионные) тесты в рамках unittest фреймворка (на самом деле его внутренняя настройка, которая дает нам огромные преимущества, такие как параллельное выполнение тестов на кластере машин и т.д., и т.д. - большая добавочная стоимость этой настройки, поэтому мы так заинтересованы в использовании unittest фреймворк).

Каждый тест представлен в файле (параметры, используемые в этом тесте, за которыми следуют ожидаемые результаты). Наш integration_test считывает все такие файлы из каталога, анализирует каждый из них, а затем вызывает:

def addtestmethod(testcase, uut, testname, parameters, expresults):
  def testmethod(self):
    results = uut(parameters)
    self.assertEqual(expresults, results)
  testmethod.__name__ = testname
  setattr(testcase, testname, testmethod)

Мы начинаем с пустого класса тестов:

class IntegrationTest(unittest.TestCase): pass

, а затем вызываем addtestmethod (IntegrationTest,... в цикле, в котором мы читаем все соответствующие файлы и анализируем их, чтобы получить тестовое имя, параметры и выражения.

Наконец, мы называем наш собственный специализированный испытательный питатель, который выполняет тяжелый подъем (распределение тестов по доступным машинам в кластере, сбор результатов и т.д.). Мы не хотели изобретать это колесо с богатой добавленной стоимостью, поэтому мы делаем тестовый случай настолько близким к типичному «ручному кодированию», насколько это необходимо, чтобы «обмануть» бегуна, чтобы он работал правильно для нас; -).

Если у вас нет конкретных причин (хорошие тестовые бегуны или тому подобное) использовать unittest 's подход для ваших (интеграции?) тестов, вы можете обнаружить, что ваша жизнь проще с другим подходом. Однако этот вполне жизнеспособен, и мы вполне довольны его результатами (которые в основном включают в себя потрясающе быстрые запуски больших номеров люкс интеграционных/регрессионных тестов! -).

-121--4349455-

На моем сервере с вашей конфигурацией моя базовая производительность такова:

  • InnoDB: 5 .71s
  • MyISAM: 2 .50s

Это неплохо в моей книге, но это может использовать некоторые настройки.

Производительность InnoDB можно повысить на нескольких фронтах:

Увеличение innodb _ buffer _ pool _ size

  • Это единственная наиболее важная конфигурационная переменная InnoDB. В идеале это должно быть 70-80% вашей доступной оперативной памяти на сервере, посвященном MySQL и InnoDB.
  • Увеличение innodb _ buffer _ pool _ size на моем сервере для 2G (более чем достаточно для этого теста) уменьшило время InnoDB до 4,60s

Сделайте идентификатор ПЕРВИЧНОГО КЛЮЧА

  • кластеров InnoDB Если он не объявлен, InnoDB создает случайный неявно. Наличие последовательного первичного ключа (id) быстрее случайного.
  • Создание идентификатора PRIMARY KEY на моем сервере уменьшило время InnoDB до 3 80s

Модернизаций MySQL/InnoDB

С MySQL 5,1 + MySQL поддерживает подключаемые местом хранения механизмы. В частности, новый плагин InnoDB .

Новый механизм InnoDB обеспечивает множество многочисленных улучшений производительности, которые могут оказать значительное влияние на данный тип запроса.

Примечание:

  • Начиная с MySQL 5.1.38,Подключаемый модуль InnoDB включен в MySQL
  • Начиная с MySQL 5.1.43, подключаемый модуль InnoDB не только включен, но и является механизмом по умолчанию для MySQL
-121--4321027-

XCode автоматически предоставляет все заголовочные файлы из инфраструктуры, добавленной в проект через Так, "cocoa.h" является частью "cocoa.framework" - следовательно, # include < cocoa/cocoa.h >

OpenGl включен < OpenGL/gl.h > , а не более ожидаемый < GL/gl.h >

1
ответ дан 28 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: